package com.cougil.uoc.seghismed.model;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

/**
 * Entitat de negoci que representa pròpiament una Visita d'un Pacient
 * @author Ignacio Cougil Jares
 */

@Entity
@Table(name = "VISITA")
public class Visita {

	private String anamnesi;
	private Date dataAlta;
	private Date dataHora;
	private Date dataModificacio;
	private String diagnosi;
	@Id
	@GeneratedValue
	private Integer id;
	@ManyToOne(fetch=FetchType.EAGER)
	@JoinColumn(name="IDMETGE",referencedColumnName="ID")
	private Metge metge;
	private String tema;
	private String tractament;

	public Visita() {
		super();
	}

	public Visita(Integer id) {
		this();
		this.setId(id);
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(final Object other) {
		if (!(other instanceof Visita)) {
			return false;
		}
		Visita castOther = (Visita) other;
		return new EqualsBuilder().append(this.id, castOther.id).isEquals();
	}
	/**
	 * @return Retorna el valor de la propietat anamnesi
	 */
	public String getAnamnesi() {
		return this.anamnesi;
	}
	/**
	 * @return Retorna el valor de la propietat dataAlta
	 */
	public Date getDataAlta() {
		return this.dataAlta;
	}
	/**
	 * @return Retorna el valor de la propietat dataHora
	 */
	public Date getDataHora() {
		return this.dataHora;
	}
	/**
	 * @return Retorna el valor de la propietat dataModificacio
	 */
	public Date getDataModificacio() {
		return this.dataModificacio;
	}
	/**
	 * @return Retorna el valor de la propietat diagnosi
	 */
	public String getDiagnosi() {
		return this.diagnosi;
	}
	//
	// SIGNATURA DEL METGEE????
	/*
    @Lob @Basic(fetch=LAZY)
    @Column(name="CERTIFICAT")
    */
    //private X509Certificate certificat;
	/**
	 * @return Retorna el valor de la propietat id
	 */
	public Integer getId() {
		return this.id;
	}
	/**
	 * @return Retorna el valor de la propietat metge
	 */
	public Metge getMetge() {
		return this.metge;
	}
	/**
	 * @return Retorna el valor de la propietat tema
	 */
	public String getTema() {
		return this.tema;
	}
	/**
	 * @return Retorna el valor de la propietat tractament
	 */
	public String getTractament() {
		return this.tractament;
	}
	/* (non-Javadoc)
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		return new HashCodeBuilder().append(this.id).toHashCode();
	}
	/**
	 * @param anamnesi Estableix el valor de la propietat anamnesi
	 */
	public void setAnamnesi(String anamnesi) {
		this.anamnesi = anamnesi;
	}
	/**
	 * @param Estableix dataAlta com a valor de la propietat dataAlta
	 */
	public void setDataAlta(Date dataAlta) {
		this.dataAlta = dataAlta;
	}
	/**
	 * @param dataHora Estableix el valor de la propietat dataHora
	 */
	public void setDataHora(Date dataHora) {
		this.dataHora = dataHora;
	}
	/**
	 * @param Estableix dataModificacio com a valor de la propietat dataModificacio
	 */
	public void setDataModificacio(Date dataModificacio) {
		this.dataModificacio = dataModificacio;
	}
	/**
	 * @param diagnosi Estableix el valor de la propietat diagnosi
	 */
	public void setDiagnosi(String diagnosi) {
		this.diagnosi = diagnosi;
	}
	/**
	 * @param id Estableix el valor de la propietat id
	 */
	public void setId(Integer id) {
		this.id = id;
	}
	/**
	 * @param metge Estableix el valor de la propietat metge
	 */
	public void setMetge(Metge metge) {
		this.metge = metge;
	}

	/**
	 * @param tema Estableix el valor de la propietat tema
	 */
	public void setTema(String tema) {
		this.tema = tema;
	}

	/**
	 * @param tractament Estableix el valor de la propietat tractament
	 */
	public void setTractament(String tractament) {
		this.tractament = tractament;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
			.append("id", this.id)
			.append("dataHora", this.dataHora)
			.append("tema",	this.tema)
			.append("anamnesi", this.anamnesi)
			.append("diagnosi",	this.diagnosi)
			.append("tractament", this.tractament)
			.append("dataAlta", this.dataAlta)
			.append("dataModificacio",this.dataModificacio)
			.append("metge", this.metge)
			.toString();
	}



}
